#include <stdio.h>
#include <malloc.h>
#include "Lstack.h"
#include "Lqueue.h"
#include <string.h>
#include <stdlib.h>

int main()
{

    /*****循环读取*****/
    printf("请逐个输入字符，输入#时输入结束！\n");
    int n = 0;
    char str[100];
    while (scanf("%c", &str[n++]))
    {
        if (str[n - 1] == '\n') //如果读取到'\n'，则留在当前位置
        {                       //不可以把换行符放进字符串
            n = n - 1;
        }
        if (str[n - 1] == '#') //输入#就结束输入
        {
            break;
        }
    }
    str[n - 1] = '\0';
    int l = strlen(str); //获取字符串的长度，注意要'#'已被换成'\0'
    /*****循环读取*****/

    /*****输出字符串*****/
    printf("您输入的字符串：%s\n", str);
    /*
    int i;
    for (i = 0; i < n - 1; i++)
    {
        printf("%c", str[i]);
    }
    printf("\n");
    */
    /*****输出字符串*****/

    /*****长度不是奇数可以直接断定不合题意*****/
    /*****中间不是&可以直接断定不符合题意*****/
    if (l % 2 == 0 || str[(l + 1) / 2 - 1] != '&')
    {
        printf("%s不是符合题意的字符序列。\n",str);
        system("pause");
        return 0;
    }
    /*****长度不是奇数可以直接断定不合题意*****/
    /*****中间不是&可以直接断定不符合题意*****/

    int i;

    /*****把字符串存储到堆栈中*****/
    sll sh;
    // Sinitiate(sh);
    sh = (sll)malloc(sizeof(snode));
    sh->next = nullptr;
    i = 0;
    while (i <= l - 1)
    {
        Spush(sh, str[i]);
        i = i + 1;
    }
    /*****把字符串存储到堆栈中*****/

    /*****把字符串存储到队列中*****/
    qll qh;
    qh = (qll)malloc(sizeof(qnode));
    qh->next = nullptr;
    Qappend(qh, str); //把循环放在头文件外面时出现了难以解决的“segment fault”
                      //故暂且将循环放进头文件里
    /*****把字符串存储到队列中*****/

    /*****剩余情况的判断*****/
    i = 0;
    char a, b;
    while (i <= l - 1)
    {
        a = Spop(sh);
        b = Qdelete(qh);
        if (a != b ||                         //不是回文
            a == '&' && i != (l + 1) / 2 - 1) //非正中央出现了'&'
        {
            printf("%s不是符合题意的字符序列。\n", str);
            system("pause");
            return 0;
        }
        i = i + 1;
    }
    printf("%s是符合题意的字符序列。\n", str); //未发现不一样的字符，因此断定是回文
    system("pause");
    return 1;
    /*****剩余情况的判断*****/
    
}